home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Texteditors / Origami / Sources / src / autoalias / autoalias.c next >
Encoding:
C/C++ Source or Header  |  1996-09-27  |  9.9 KB  |  349 lines

  1. /*{{{}}}*/
  2. /*{{{  #includes*/
  3. #ifdef TERMINFO
  4. #  ifdef INC_CURSES
  5. #     include <curses.h>
  6. #  endif
  7. #  ifdef INC_TERM
  8. #     include <term.h>
  9. #  endif
  10. #else
  11. #  include <termcap.h>
  12. #endif
  13. #include <string.h>
  14. #ifndef NO_GETOPT_H
  15. #  include <getopt.h>
  16. #endif
  17. #include <stdlib.h>
  18. #include <stdio.h>
  19. #include <lib/ori_bool.h>
  20. #include <h/envvar_str.h>
  21. /*}}}  */
  22.  
  23. /*{{{  variables*/
  24. #ifdef TERMINFO
  25. #  define DATABASE "terminfo"
  26. #else
  27. #  define DATABASE "termcap"
  28.    char termcap_area[1024];
  29.    char bp[1024];
  30.    char *pointer;
  31. #endif
  32. boolean list=False;
  33. /*}}}  */
  34.  
  35. /*{{{  error_exit*/
  36. void error_exit(char const * const m,char const * const t)
  37.  {
  38.    fprintf(stderr,m,t);
  39.    exit(1);
  40.  }
  41. /*}}}  */
  42. /*{{{  create_alias*/
  43. #ifdef TERMINFO
  44. #  define CREATE_ALIAS(c,i,a) create_alias(a,(unsigned char*)i)
  45.    void create_alias(char const * const name, unsigned char const * code)
  46. #else
  47. #  define CREATE_ALIAS(c,i,a) create_alias(a,c)
  48.   void create_alias(char const * const name, char const * const cap)
  49. # endif
  50. {
  51. # ifndef TERMINFO
  52.      unsigned char *code;
  53.      code=(unsigned char*)tgetstr(cap,&pointer);
  54. # endif
  55.   if (list)
  56.    { printf("%s\n",name);
  57.      return;
  58.    }
  59.   if (!code || !*code)
  60.    { printf("  ;(alias %s ( $UNKNOWN )\n",name);
  61.      return;
  62.    }
  63.   printf("  (alias %s (",name);
  64.   while (*code)
  65.   {
  66.     if (*code==127)
  67.        printf(" C-?");
  68.     else if (*code>=' ')
  69.        printf(" \"%c",*code);
  70.     else
  71.        printf(" C-%c",CTRL_CHARS[*code]);
  72.     code++;
  73.   }
  74.   printf(" ))\n");
  75. }
  76. /*}}}  */
  77.  
  78. /*{{{  main*/
  79. int main(int argc, char *argv[])
  80. {
  81.   /*{{{  variable declarations*/
  82. #  ifdef TERMINFO
  83.      int result;
  84. #  endif
  85.   char const *terminal;
  86.   int c;
  87.   extern char *optarg;
  88.   extern int optind;
  89.   boolean err=False;
  90.   boolean no_term=False;
  91.   /*}}}  */
  92.  
  93.   /*{{{  parse arguments*/
  94.   terminal=getenv("TERM");
  95.   /*{{{  process options*/
  96.   while ((c=getopt(argc,argv,"hlnt:"))!=-1)
  97.      switch (c)
  98.       {
  99.         /*{{{  h*/
  100.         case '?':
  101.         case 'h':
  102.            err=True;
  103.            break;
  104.         /*}}}  */
  105.         /*{{{  l*/
  106.         case 'l':
  107.            list=True;
  108.            break;
  109.         /*}}}  */
  110.         /*{{{  n*/
  111.         case 'n':
  112.            no_term=True;
  113.            break;
  114.         /*}}}  */
  115.         /*{{{  t*/
  116.         case 't':
  117.            terminal=optarg;
  118.            break;
  119.         /*}}}  */
  120.       }
  121.   if (list)
  122.      no_term=True;
  123.   /*}}}  */
  124.   /*{{{  check usage*/
  125.   if (err || optind<argc)
  126.      error_exit("Usage: autoalias [-hln] [-t terminalname]\n",0);
  127.   /*}}}  */
  128.   /*}}}  */
  129.   if (!terminal || !terminal[0])
  130.    /*{{{  complain*/
  131.      error_exit("autoalias: no environment variable TERM.\n",0);
  132.    /*}}}  */
  133.   /*{{{  get terminal data*/
  134.   switch
  135.    (
  136. #    ifdef TERMINFO
  137.        (setupterm(terminal,2,&result),result)
  138. #    else
  139.        tgetent(bp,terminal)
  140. #    endif
  141.    )
  142.    { case -1:
  143.         error_exit("autoalias: cannot access " DATABASE " database for terminal %s.\n",terminal);
  144.      case 0:
  145.         error_exit("autoalias: no " DATABASE " entry for %s.\n",terminal);
  146.      default:
  147. #       ifndef TERMINFO
  148.            pointer = termcap_area;
  149. #       endif
  150.         break;
  151.    }
  152.   /*}}}  */
  153.   if (!no_term)
  154.      printf("(terminal (%s)\n",terminal);
  155.   /*{{{  f0-f63*/
  156.   CREATE_ALIAS("k0",key_f0,"f0");
  157.   CREATE_ALIAS("k1",key_f1,"f1");
  158.   CREATE_ALIAS("k2",key_f2,"f2");
  159.   CREATE_ALIAS("k3",key_f3,"f3");
  160.   CREATE_ALIAS("k4",key_f4,"f4");
  161.   CREATE_ALIAS("k5",key_f5,"f5");
  162.   CREATE_ALIAS("k6",key_f6,"f6");
  163.   CREATE_ALIAS("k7",key_f7,"f7");
  164.   CREATE_ALIAS("k8",key_f8,"f8");
  165.   CREATE_ALIAS("k9",key_f9,"f9");
  166.   CREATE_ALIAS("k;",key_f10,"f10");
  167.   CREATE_ALIAS("F1",key_f11,"f11");
  168.   CREATE_ALIAS("F2",key_f12,"f12");
  169.   CREATE_ALIAS("F3",key_f13,"f13");
  170.   CREATE_ALIAS("F4",key_f14,"f14");
  171.   CREATE_ALIAS("F5",key_f15,"f15");
  172.   CREATE_ALIAS("F6",key_f16,"f16");
  173.   CREATE_ALIAS("F7",key_f17,"f17");
  174.   CREATE_ALIAS("F8",key_f18,"f18");
  175.   CREATE_ALIAS("F9",key_f19,"f19");
  176.   CREATE_ALIAS("FA",key_f20,"f20");
  177.   CREATE_ALIAS("FB",key_f21,"f21");
  178.   CREATE_ALIAS("FC",key_f22,"f22");
  179.   CREATE_ALIAS("FD",key_f23,"f23");
  180.   CREATE_ALIAS("FE",key_f24,"f24");
  181.   CREATE_ALIAS("FF",key_f25,"f25");
  182.   CREATE_ALIAS("FG",key_f26,"f26");
  183.   CREATE_ALIAS("FH",key_f27,"f27");
  184.   CREATE_ALIAS("FI",key_f28,"f28");
  185.   CREATE_ALIAS("FJ",key_f29,"f29");
  186.   CREATE_ALIAS("FK",key_f30,"f30");
  187.   CREATE_ALIAS("FL",key_f31,"f31");
  188.   CREATE_ALIAS("FM",key_f32,"f32");
  189. #  ifndef SMALL_TERMINFO
  190.      CREATE_ALIAS("FN",key_f33,"f13");
  191.      CREATE_ALIAS("FO",key_f34,"f34");
  192.      CREATE_ALIAS("FP",key_f35,"f35");
  193.      CREATE_ALIAS("FQ",key_f36,"f36");
  194.      CREATE_ALIAS("FR",key_f37,"f37");
  195.      CREATE_ALIAS("FS",key_f38,"f38");
  196.      CREATE_ALIAS("FT",key_f39,"f39");
  197.      CREATE_ALIAS("FU",key_f40,"f40");
  198.      CREATE_ALIAS("FV",key_f41,"f41");
  199.      CREATE_ALIAS("FW",key_f42,"f42");
  200.      CREATE_ALIAS("FX",key_f43,"f43");
  201.      CREATE_ALIAS("FY",key_f44,"f44");
  202.      CREATE_ALIAS("FZ",key_f45,"f45");
  203.      CREATE_ALIAS("Fa",key_f46,"f46");
  204.      CREATE_ALIAS("Fb",key_f47,"f47");
  205.      CREATE_ALIAS("Fc",key_f48,"f48");
  206.      CREATE_ALIAS("Fd",key_f49,"f49");
  207.      CREATE_ALIAS("Fe",key_f50,"f50");
  208.      CREATE_ALIAS("Ff",key_f51,"f51");
  209.      CREATE_ALIAS("Fg",key_f52,"f52");
  210.      CREATE_ALIAS("Fh",key_f53,"f53");
  211.      CREATE_ALIAS("Fi",key_f54,"f54");
  212.      CREATE_ALIAS("Fj",key_f55,"f55");
  213.      CREATE_ALIAS("Fk",key_f56,"f56");
  214.      CREATE_ALIAS("Fl",key_f57,"f57");
  215.      CREATE_ALIAS("Fm",key_f58,"f58");
  216.      CREATE_ALIAS("Fn",key_f59,"f59");
  217.      CREATE_ALIAS("Fo",key_f60,"f60");
  218.      CREATE_ALIAS("Fp",key_f61,"f61");
  219.      CREATE_ALIAS("Fq",key_f62,"f62");
  220.      CREATE_ALIAS("Fr",key_f63,"f63");
  221. #  endif
  222.   /*}}}  */
  223.   /*{{{  keypad*/
  224.   CREATE_ALIAS("K1",key_a1,"upper_left_pad");
  225.   CREATE_ALIAS("ku",key_up,"up");
  226.   CREATE_ALIAS("K3",key_a3,"upper_right_pad");
  227.   CREATE_ALIAS("kl",key_left,"left");
  228. #  ifndef SMALL_TERMINFO
  229.      CREATE_ALIAS("#4",key_sleft,"shift-left");
  230. #  endif
  231.   CREATE_ALIAS("K2",key_b2,"center_pad");
  232.   CREATE_ALIAS("kr",key_right,"right");
  233. #  ifndef SMALL_TERMINFO
  234.      CREATE_ALIAS("%i",key_sright,"shift-right");
  235. #  endif
  236.   CREATE_ALIAS("K4",key_c1,"bottom_left_pad");
  237.   CREATE_ALIAS("kd",key_down,"down");
  238.   CREATE_ALIAS("K5",key_c3,"bottom_right_pad");
  239.   /*}}}  */
  240.   /*{{{  move*/
  241.   CREATE_ALIAS("kh",key_home,"home");
  242. #  ifndef SMALL_TERMINFO
  243.      CREATE_ALIAS("#2",key_shome,"shift-home");
  244. #  endif
  245.   CREATE_ALIAS("kH",key_ll,"home-down");
  246. #  ifndef SMALL_TERMINFO
  247.      CREATE_ALIAS("@1",key_beg,"begin");
  248.      CREATE_ALIAS("&9",key_sbeg,"shift-begin");
  249. #  endif
  250.   CREATE_ALIAS("kP",key_ppage,"prev_page");
  251. #  ifndef SMALL_TERMINFO
  252.      CREATE_ALIAS("%8",key_previous,"previous-object");
  253.      CREATE_ALIAS("%e",key_sprevious,"shift-previous");
  254. #  endif
  255.   CREATE_ALIAS("kN",key_npage,"next_page");
  256. #  ifndef SMALL_TERMINFO
  257.      CREATE_ALIAS("%5",key_next,"next-object");
  258.      CREATE_ALIAS("%c",key_snext,"shift-next");
  259.      CREATE_ALIAS("@7",key_end,"end");
  260.      CREATE_ALIAS("*7",key_send,"shift-end");
  261. #  endif
  262.   CREATE_ALIAS("kR",key_sr,"scroll-up");
  263.   CREATE_ALIAS("kF",key_sf,"scroll-down");
  264.   /*}}}  */
  265.   /*{{{  clr/del/ins*/
  266.   CREATE_ALIAS("kI",key_ic,"insert-char");
  267.   CREATE_ALIAS("kb",key_backspace,"backspace");
  268.   CREATE_ALIAS("kD",key_dc,"rubout");
  269. #  ifndef SMALL_TERMINFO
  270.      CREATE_ALIAS("*4",key_sdc,"shift-rubout");
  271. #  endif
  272.   CREATE_ALIAS("kA",key_il,"insert-line");
  273.   CREATE_ALIAS("kL",key_dl,"delline");
  274. #  ifndef SMALL_TERMINFO
  275.      CREATE_ALIAS("*5",key_sdl,"shift-delline");
  276. #  endif
  277.   CREATE_ALIAS("kE",key_eol,"clreol");
  278. #  ifndef SMALL_TERMINFO
  279.      CREATE_ALIAS("*8",key_seol,"shift-clear-line");
  280. #  endif
  281.   CREATE_ALIAS("kS",key_eos,"clreos");
  282.   CREATE_ALIAS("kC",key_clear,"clear-screen");
  283.   /*}}}  */
  284.   /*{{{  tab*/
  285. #  ifndef SMALL_TERMINFO
  286.      CREATE_ALIAS("kB",key_btab,"back_tab");
  287. #  endif
  288.   CREATE_ALIAS("ka",key_catab,"clear-all-tabs");
  289.   CREATE_ALIAS("kt",key_ctab,"clear-tab");
  290.   CREATE_ALIAS("kT",key_stab,"set-tab");
  291.   /*}}}  */
  292.   /*{{{  control*/
  293. #  ifndef SMALL_TERMINFO
  294.      CREATE_ALIAS("@2",key_cancel,"cancel");
  295.      CREATE_ALIAS("&0",key_scancel,"shift-cancel");
  296.      CREATE_ALIAS("@6",key_create,"create");
  297.      CREATE_ALIAS("*3",key_screate,"shift-create");
  298.      CREATE_ALIAS("%6",key_open,"open");
  299.      CREATE_ALIAS("@3",key_close,"close");
  300.      CREATE_ALIAS("@4",key_command,"command");
  301.      CREATE_ALIAS("*1",key_scommand,"shift-command");
  302.      CREATE_ALIAS("@8",key_enter,"send");
  303.      CREATE_ALIAS("@9",key_exit,"exit");
  304.      CREATE_ALIAS("*9",key_sexit,"shift-exit");
  305.      CREATE_ALIAS("&6",key_save,"save");
  306.      CREATE_ALIAS("!1",key_ssave,"shift-save");
  307.      CREATE_ALIAS("&2",key_refresh,"refresh");
  308.      CREATE_ALIAS("&4",key_restart,"restart");
  309.      CREATE_ALIAS("%1",key_help,"help");
  310.      CREATE_ALIAS("#1",key_shelp,"shift-help");
  311.      CREATE_ALIAS("%3",key_message,"message");
  312.      CREATE_ALIAS("%a",key_smessage,"shift-message");
  313.      CREATE_ALIAS("%7",key_options,"options");
  314.      CREATE_ALIAS("%d",key_soptions,"shift-options");
  315.      CREATE_ALIAS("&5",key_resume,"resume");
  316.      CREATE_ALIAS("*6",key_select,"select");
  317.      CREATE_ALIAS("#3",key_sic,"shift-input");
  318.      CREATE_ALIAS("%9",key_print,"print");
  319.      CREATE_ALIAS("%f",key_sprint,"shift-print");
  320.      CREATE_ALIAS("&1",key_reference,"reference");
  321.      CREATE_ALIAS("%j",key_srsume,"shift-resume");
  322.      CREATE_ALIAS("&7",key_suspend,"suspend");
  323.      CREATE_ALIAS("!2",key_ssuspend,"shift-suspend");
  324. #  endif
  325.   /*}}}  */
  326.   /*{{{  edit*/
  327. #  ifndef SMALL_TERMINFO
  328.      CREATE_ALIAS("@5",key_copy,"copy");
  329.      CREATE_ALIAS("*2",key_scopy,"shift-copy");
  330.      CREATE_ALIAS("@0",key_find,"find");
  331.      CREATE_ALIAS("*0",key_sfind,"shift-find");
  332.      CREATE_ALIAS("%2",key_mark,"mark");
  333.      CREATE_ALIAS("%4",key_move,"move");
  334.      CREATE_ALIAS("%b",key_smove,"shift-move");
  335.      CREATE_ALIAS("%0",key_redo,"redo");
  336.      CREATE_ALIAS("%g",key_sredo,"shift-redo");
  337.      CREATE_ALIAS("&3",key_replace,"replace");
  338.      CREATE_ALIAS("%h",key_sreplace,"shift-replace");
  339.      CREATE_ALIAS("&8",key_undo,"undo");
  340.      CREATE_ALIAS("!3",key_sundo,"shift-undo");
  341. #  endif
  342.   /*}}}  */
  343.   if (!no_term)
  344.      printf(")\n");
  345.  
  346.   exit(0);
  347. }
  348. /*}}}  */
  349.